package com.shujia.commom

import org.apache.spark.internal.Logging
import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}

abstract class SparkTool extends Logging {

  def main(args: Array[String]): Unit = {

    /**
     * 获取时间分区
     *
     */

    if (args.length == 0) {
      logError("请指定时间分区")
      return
    }
    //分区
    val ds: String = args.head


    //创建spark环境
    val spark: SparkSession = SparkSession
      .builder()
      .enableHiveSupport()
      .getOrCreate()


    //调用子类实现的抽象方法
    this.run(spark, ds)

  }

  /**
   * 抽象方法: 在子类中实现这个方法
   * import spark.implicits._
   * import org.apache.spark.sql.functions._
   *
   * @param spark ：spark环境
   * @param ds    ：分区
   */
  def run(spark: SparkSession, ds: String): Unit

  /**
   * 用于保存数据的方法
   *
   */

  def save(df: DataFrame, path: String, format: String = "csv", saveMode: SaveMode = SaveMode.Overwrite, sep: String = "\t"): Unit = {
    df
      .write
      .format(format) //保存数据的格式
      .mode(saveMode) //是否覆盖数据
      .option("sep", sep) //数据的分隔符
      .save(path) //保存路径
  }

}
